package com.lanou3g.code0404.morning;

/**
 * Created by dllo on 18/4/4.
 */
// 返回值
public class Foo2 {

    /*
    1. add 方法作用: 接收2个int类型那个值
                    并求和
    2. int add(int num1,int num2){}
       第一个int 叫做返回值类型
       用来表示:这个方法可以返回给调用方
       一个什么类型的数据
     */
    int add(int num1, int num2) {
        int result = num1 + num2;
        // 如果 返回值类型这里写的不是void
        // 则这个方法必须有明确的返回值
        // 即必须写出 return关键字
        // return关键字后 跟着要返回的结果
        return result;
    }

    void fun() {
        System.out.println("这个方法没有返回值");
    }
    /*
    return 专门用在方法中,
    这个关键字的作用是:直接,结束一个方法,
    即在return后的代码,全部都不会执行

    如果一个方法声明了有返回值,那么必须写return 返回值;
    如果一个方法声明了没有返回值(void),那么可以省略return;
        并且 由于没有返回值,那么即使写了return,后面也不需要写要返回的值
     */

    /*
    打印一个数组
     */
    void printArr(int[] arr) {
        // 这个if不写就是契约式编程
        if (arr == null) {
            // 防御式编程
            System.out.println("你有没有new 自己心里没点B数吗");
            // 当执行到return的时候,方法会无条件
            // 结束
            return;
        }
        System.out.print("[");
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i]);
            if (i != arr.length - 1) {
                System.out.print(",");
            }
        }
        System.out.println("]");
    }

    // 但凡我们要 改变一个字符串的值
    // 就必须有返回值
    String fun3(String s) {
        s = "Echo:" + s;
        return s;
    }

    Table fun4(Table a) {
        a = new Table();
        a.colour = "red";
        a.legCount = 4;
        return a;
    }
    // 可以用... 表示 不确定个数的参数
    // 不是很常用,但是有这样的写法
    // nums 其实 就是个int类型的数组

    int addAll(int... nums) {
        int sum = 0;
        for (int i = 0; i < nums.length; i++) {
            sum += nums[i];
        }
        return sum;
    }
}
